package com.ys.arruntily;

import java.util.Arrays;

/**
 * @author CodeYang
 * @Description
 * 拷贝原生底层调用
 * @Date 2020/12/11 15:56
 */
public class Java原生底层拷贝方法 {

    public static void main(String[] args) {
        // 原数组
      int[] arr = {1,3,5,6,7,8};
      // 目标数组
      int[] dest = new int[arr.length];
        int[] ints = Arrays.copyOf(arr, 3);
        System.out.println(Arrays.toString(ints));
        System.arraycopy(arr,0,dest,0,3);
        System.out.println(Arrays.toString(dest));

    }
    /**
     * src:原数组
     * srcPos: 原数组开始拷贝的索引位置
     * dest: 目标数组
     * destPos: 目标数组从那个索引位置开始存放原数组元素
     * length: 需要复制元素的个数
     */
//      System.arraycopy(arr,0,dest,0,arr.length);

    /**
     * 实现拷贝数组---自定义
     * @param arr 原数组
     * @param formIndex 开始的索引位置
     * @param size 需要拷贝元素的个数
     * @return  拷贝后的数组
     */
    static int[] copyArr(int[] arr,int formIndex,int size){
        //新数组的长度
        int length = size -formIndex;
        // 如果长度<0 证明 无法创建新数组
        if (length<0) throw  new IllegalArgumentException("参数异常错误:"+formIndex+">"+size);
        //创建新数组
        int newArr[] =new int[length];
        //
        System.arraycopy(arr,formIndex,newArr,0,Math.min(arr.length - formIndex,length));
        return newArr;
    }
    static double[] test(double ... arr){
        return arr;
    }

}
